package org.yelongframework.excel.sheet;

import java.util.List;

import org.yelongframework.excel.row.ExcelRow;
import org.yelongframework.excel.workbook.ExcelWorkbook;
import org.yelongframework.lang.Nullable;

/**
 * Excel的Sheet页
 * 
 * @since 1.0.0
 */
public interface ExcelSheet {

	// ==================================================基础信息==================================================

	/**
	 * @return 工作表名称
	 */
	String getSheetName();

	/**
	 * @return 工作表在工作薄的索引
	 */
	int getSheetIndex();

	// ==================================================行==================================================

	/**
	 * 获取制定行数的行信息
	 * 
	 * @param rowIndex 行索引
	 * @return 行
	 */
	ExcelRow getRow(int rowIndex);

	/**
	 * 获取所有Excel行集合
	 * 
	 * @return 行集合
	 */
	List<ExcelRow> getRowList();

	// ==================================================行数==================================================

	/**
	 * @return 这个工作表的第一行(从0开始)
	 */
	int getFirstRowNum();

	/**
	 * @return 这个工作表的最后一行(从0开始)
	 */
	int getLastRowNum();

	// ==================================================复制行==================================================

	/**
	 * 复制行
	 * 
	 * @param beginRowIndex 起始行索引。从0开始。
	 * @param endRowIndex   结束行索引。从0开始。
	 * @param position      位置。
	 */
	void copyRows(int beginRowIndex, int endRowIndex, int position);

	// ==================================================设置值==================================================

	/**
	 * 单元格设置值
	 * 
	 * @param rowIndex    行
	 * @param columnIndex 列
	 * @param value       设置的值
	 */
	void setValue(int rowIndex, int columnIndex, @Nullable String value);

	/**
	 * 单元格设置值
	 * 
	 * @param rowIndex    行
	 * @param columnIndex 列
	 * @param value       设置的值
	 */
	void setValue(int rowIndex, int columnIndex, @Nullable Object value);

	// ==================================================所属的工作薄==================================================

	/**
	 * @return 所属的工作薄
	 */
	ExcelWorkbook getWorkbook();

	// ==================================================工作表==================================================

	/**
	 * @return Excel工作表
	 */
	Object getSheet();

}
